--- channels/chan_sip.c.orig 2007-04-27 10:04:07.000000000 -0400 +++ channels/chan_sip.c 2007-05-12 07:56:46.000000000 -0400 @@ -776,8 +776,8 @@ #define SIP_PAGE2_T38SUPPORT_RTP (2 << 20) /*!< 21: T38 Fax Passthrough Support (not implemented) */ #define SIP_PAGE2_T38SUPPORT_TCP (4 << 20) /*!< 22: T38 Fax Passthrough Support (not implemented) */ #define SIP_PAGE2_CALL_ONHOLD (3 << 23) /*!< Call states */ -#define SIP_PAGE2_CALL_ONHOLD_ONEDIR (1 << 23) /*!< 23: One directional hold */ -#define SIP_PAGE2_CALL_ONHOLD_INACTIVE (1 << 24) /*!< 24: Inactive */ +#define SIP_PAGE2_CALL_ONHOLD_2DIR (1 << 23) /*!< 23: Two directional hold */ +#define SIP_PAGE2_CALL_ONHOLD_ACTIVE (1 << 24) /*!< 24: Active */ #define SIP_PAGE2_RFC2833_COMPENSATE (1 << 25) /*!< 25: ???? */ #define SIP_PAGE2_BUGGY_MWI (1 << 26) /*!< 26: Buggy CISCO MWI fix */ #define SIP_PAGE2_OUTGOING_CALL (1 << 27) /*!< 27: Is this an outgoing call? */ @@ -5275,9 +5275,9 @@ p->owner->uniqueid); } if (sendonly == 1) /* One directional hold (sendonly/recvonly) */ - ast_set_flag(&p->flags[1], SIP_PAGE2_CALL_ONHOLD_ONEDIR); + ast_set_flag(&p->flags[1], SIP_PAGE2_CALL_ONHOLD ^ SIP_PAGE2_CALL_ONHOLD_2DIR); else if (sendonly == 2) /* Inactive stream */ - ast_set_flag(&p->flags[1], SIP_PAGE2_CALL_ONHOLD_INACTIVE); + ast_set_flag(&p->flags[1], SIP_PAGE2_CALL_ONHOLD ^ SIP_PAGE2_CALL_ONHOLD_ACTIVE); if (global_notifyhold) sip_peer_hold(p, 1); } @@ -6249,9 +6249,9 @@ snprintf(connection, sizeof(connection), "c=IN IP4 %s\r\n", ast_inet_ntoa(dest.sin_addr)); ast_build_string(&m_audio_next, &m_audio_left, "m=audio %d RTP/AVP", ntohs(dest.sin_port)); - if (ast_test_flag(&p->flags[1], SIP_PAGE2_CALL_ONHOLD_ONEDIR)) + if (!ast_test_flag(&p->flags[1], SIP_PAGE2_CALL_ONHOLD_2DIR)) hold = "a=recvonly\r\n"; - else if (ast_test_flag(&p->flags[1], SIP_PAGE2_CALL_ONHOLD_INACTIVE)) + else if (!ast_test_flag(&p->flags[1], SIP_PAGE2_CALL_ONHOLD_ACTIVE)) hold = "a=inactive\r\n"; else hold = "a=sendrecv\r\n";